//#include <iostream>
//#include <string>
//using namespace std;
//int t, n, k;
//string s;
//int fun()
//{
//	int ret = 0;
//	for (int i = 0; i < s.size(); i++)
//	{
//		if (s[i] == 'L')
//		{
//			ret--;
//		}
//		else
//		{
//			if (i - 1 >= 0 && i - 2 >= 0 && s[i - 1] == 'W' && s[i - 2] == 'W')
//			{
//				ret += k;
//			}
//			else
//			{
//				ret += 1;
//			}
//		}
//	}
//	return ret;
//}
//int main()
//{
//	cin >> t;
//	while (t--)
//	{
//		cin >> n >> k >> s;
//		cout << fun() << endl;
//	}
//
//	return 0;
//}




//class Solution
//{
//	int hash[100010] = { 0 };
//public:
//	int maxLength(vector<int>& arr)
//	{
//		int left = 0, right = 0, n = arr.size();
//		int ret = 0;
//		while (right < n)
//		{
//			hash[arr[right]]++;
//			while (hash[arr[right]] > 1) 
//				hash[arr[left]]--; 
//		}
//		ret = max(ret, right - left + 1); 
//	}
//	return ret;
//}
//};




//#include <iostream>
//using namespace std;
//const int N = 100010;
//int n;
//char s[N];
//char ret[N];
//int main()
//{
//	cin >> n >> s;
//
//	int hash[26] = { 0 }; 
//	for (int i = 0; i < n; i++)
//	{
//		if (maxCount < ++hash[s[i] - 'a'])
//		{
//			maxCount = hash[s[i] - 'a'];
//			maxIndex = s[i] - 'a';
//		}
//	}
//
//	if (maxCount > (n + 1) / 2) cout << "no" << endl;
//	else
//	{
//		cout << "yes" << endl;
//		int index = 0;
//		while (maxCount--)
//		{
//			ret[index] = maxIndex + 'a';
//			index += 2;
//		}
//		for (int i = 0; i < 26; i++)
//		{
//			if (hash[i] && i != maxIndex)
//			{
//				while (hash[i]--)
//				{
//					if (index >= n) index = 1;
//					ret[index] = i + 'a';
//					index += 2;
//				}
//			}
//		}
//		for (int i = 0; i < n; i++) cout << ret[i];
//		cout << endl;
//	}
//
//	return 0;
//}




//#include <iostream>
//#include <string>
//using namespace std;
//int main()
//{
//	string s1, s2;
//	while (cin >> s1 >> s2) 
//		int hash[26] = { 0 };
//	for (auto ch : s1) hash[ch - 'A']++;
//	bool ret = true;
//	for (auto ch : s2)
//	{
//		if (--hash[ch - 'A'] < 0)
//		{
//			ret = false;
//			break;
//		}
//	}
//	cout << (ret ? "Yes" : "No") << endl;
//}
//return 0;
//}



//#include <iostream>
//#include <algorithm>
//using namespace std; 
//typedef long long LL;
//const int N = 1e5 + 10;
//int n;
//LL arr[N * 3];
//int main()
//{
//	cin >> n;
//	for (int i = 0; i < 3 * n; i++) cin >> arr[i];
//	sort(arr, arr + 3 * n);
//	int pos = 3 * n - 2, count = 1;
//	LL ret = 0;
//	while (count++ <= n)
//	{
//		ret += arr[pos];
//		pos -= 2;
//	}
//	cout << ret << endl;
//	return 0;
//}



//#include <iostream>
//using namespace std;
//const int N = 1e4 + 10;
//int sum[N]; 
//int n;
//int f[N], g[N];
//int main()
//{
//	cin >> n;
//	int x;
//	for (int i = 0; i < n; i++)
//	{
//		cin >> x;
//		sum[x] += x;
//	}
//	for (int i = 1; i < N; i++)
//	{
//		f[i] = g[i - 1] + sum[i];
//		g[i] = max(f[i - 1], g[i - 1]);
//	}
//	cout << max(f[N - 1], g[N - 1]) << endl;
//	return 0;
//}



//#include <iostream>
//#include <cmath>
//using namespace std;
//typedef long long LL;
//int main()
//{
//	LL x;
//	cin >> x;
//	LL a = sqrt(x);
//	LL x1 = a * a, x2 = (a + 1) * (a + 1);
//	if (x - x1 < x2 - x) cout << x1 << endl;
//	else cout << x2 << endl;
//
//	return 0;
//}



//#include <iostream>
//#include <unordered_map>
//using namespace std;
//int n, m;
//unordered_map<int, int> cnt; 
//{
//	int g = 0; 
//	for (auto& [a, b] : cnt)
//	{
//		g += b / x + (b % x == 0 ? 0 : 1);
//	}
//	return g <= m;
//}
//int main()
//{
//	cin >> n >> m;
//	int hmax = 0; 
//	for (int i = 0; i < n; i++)
//	{
//		int x;
//		cin >> x;
//		hmax = max(hmax, ++cnt[x]);
//	}
//
//	int kinds = cnt.size();
//	if (kinds > m) 
//	{
//		cout << -1 << endl;
//	}
//	else
//	{
//		int l = 1, r = hmax;
//		while (l < r)
//		{
//			int mid = (l + r) / 2;
//			if (check(mid)) r = mid;
//			else l = mid + 1;
//		}
//		cout << l << endl;
//	}
//	return 0;
//}



#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const int N = 2e5 + 10;
vector<vector<int>> edges(N); 
int in[N];
int n, m;
queue<int> q;
vector<int> ret;
int main()
{
	cin >> n >> m;
	while (m--)
	{
		int a, b;
		cin >> a >> b;
		edges[a].push_back(b); 
	}
	for (int i = 1; i <= n; i++) 
	{ 
		if (in[i] == 0)
		{
			q.push(i);
		}
	}

	while (q.size())
	{
		int a = q.front();
		q.pop();
		ret.push_back(a);
		for (auto b : edges[a])
		{
			if (--in[b] == 0)
			{
				q.push(b);
			}
		}
	}
	if (ret.size() == n)
	{
		for (int i = 0; i < n - 1; i++)
		{
			cout << ret[i] << " ";
		}
		cout << ret[n - 1];
	}
	else
	{
		cout << -1 << endl;
	}
	return 0;
}